<?php

class Welcome extends CI_Controller {

	/**
	 * 构造方法会在类被实例化之前自动运行
	 * 利用这一特性，实现自动加载模型的目的
	 */
	public function __construct() {
		// 调用父类的构造方法
		parent::__construct();
		// 加载学生信息模型，并简写为task
		$this->load->model('Taskinfo_model', 'task');
	}

	/**
	 * index方法是CodeIgnite控制器的默认方法
	 * 因此，我们将程序的入口放在index方法中
	 * 在这里，我们调用学生信息填写表单。
	 * @return void
	 */
	public function index() {
		$this->load->view('form.html');
	}

	/**
	 * 表单验证方法，用来检验用户输入的信息是否符合要求
	 * @return void
	 */
	public function handle() {
		// 载入验证类
		$this->load->library('form_validation');

		// 设置验证规则
		// 验证规则的三个参数分别是字段名、提示信息、验证规则
		$this->form_validation->set_rules('stuname', '姓名', 'callback_username_check');
		$this->form_validation->set_rules('stunumber', '学号', 'callback_stunumber_check');
		$this->form_validation->set_rules('stuurl', '仓库地址', 'callback_stuurl_check');

		// 运行验证规则
		if ($this->form_validation->run()) {
			// 如果通过验证，则将其保存到数据库
			$this->saveToDb();
			// 显示全部数据，并显示提示信息
			$this->display('您的信息已存储到数据库！');
		} else {
			$this->load->view('form.html');
		}
	}

	/**
	 * 学生姓名检验方法
	 * @param  string $str 姓名
	 * @return bool
	 */
	public function username_check($str) {
		// 设置正则表达式模式
		$pattern = '/^[\x80-\xff]{6,}$/';
		// 验证
		if (!preg_match($pattern, $str)) {
			$this->form_validation->set_message('username_check', '姓名至少为两个汉字，不能有数字和字母');
			return FALSE;
		} else {
			return TRUE;
		}
	}

	/**
	 * 学生学号检验方法
	 * @param  string $str 	学号
	 * @return bool 		是否通过检验
	 */
	public function stunumber_check($str) {
		// 设置正则表达式
		$pattern = '/^[pP]1[3-7]\d{7}$/';
		// 验证
		if (!preg_match($pattern, $str)) {
			$this->form_validation->set_message('stunumber_check', '学号必须为10位，且开头为p');
			return FALSE;
		} else {
			return TRUE;
		}
	}

	/**
	 * 学生作业地址检验方法
	 * @param  string $str 	作业地址
	 * @return bool 		是否通过检验
	 */
	public function stuurl_check($str) {
		// 设置正则表达式
		$pattern = '@^https://(.*?)/(.*?)/(.*).git$@';
		// 验证
		if (!preg_match($pattern, $str)) {
			$this->form_validation->set_message('stuurl_check', '仓库地址为https://网站/用户名/仓库名.git');
			return FALSE;
		} else {
			return TRUE;
		}
	}

	/**
	 * 存储用户输入信息到数据库
	 * @return void
	 */
	public function saveToDb() {
		// 先将数据存放到数组
		// 使用内置input类进行输入信息的过滤
		$data['stuname']   = $this->input->post('stuname');
		$data['stunumber'] = $this->input->post('stunumber');
		$data['stuclass']  = $this->input->post('stuclass');
		$data['stuurl']    = trim($this->input->post('stuurl'));
		// 调用模型存储数据
		$this->task->add($data);
	}

	/**
	 * 显示全部学生提交信息
	 * @return void
	 */
	public function display($message = '') {
		// 获取所有学生作业信息
		$data['students'] = $this->task->getAll();
		$data['message']  = $message;
		// 显示信息
		$this->load->view('message.html', $data);
	}

	/**
	 * 显示作业详细，并给出平时成绩
	 * @param  integer $id 学生编号
	 * @return void
	 */
	public function score($id = 0) {
		// 获取作业详细信息
		$data['info'] = $this->task->creatStuTaskInfo($id);
		// 显示作业详细信息
		if ($data['info']) {
			$this->load->view('score.html', $data);
		} else {
			$this->load->view('error.html');
		}
	}

	public function test($value = '') {
		$ch = curl_init("http://top.baidu.com");

		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

		$data = curl_exec($ch);
		$str  = iconv("GB2312", "UTF-8", $data);

		$pattern = '@<div id="box-today" class="box-today">.*?<a target="_blank" href=".*?">(?<title>.*?)</a>.*?事件.*?<a target="_blank" href=".*?">(.*?)</a>@s';
		preg_match($pattern, $str, $matches);
		echo $matches['title'];

		curl_close($ch);
	}
	/**
	 * 抓取学校网站通知列表数据
	 * @return [type] [description]
	 */
	public function get_notice_list() {
		// 初始化curl类
		$ch  = curl_init();
		$url = 'http://www.xbmu.edu.cn/frontChannel.action?siteId=1&articleClassId=104';
		// 设定curl搜索地址
		curl_setopt($ch, CURLOPT_URL, $url);
		// 设定curl不返回头信息
		curl_setopt($ch, CURLOPT_HEADER, 0);
		// 设定curl不在网页中直接显示抓取内容
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		$content = curl_exec($ch);
		curl_close($ch);
		// 设置抓取正则表达式
		$pattern = '/<li><span>(?<post_time>.*?)<\/span>.*?articleId=(?<post_id>\d*).*?\>(?<post_title>.*?)<\/a>.*?<\/li>/s';
		// // 执行正则表达式
		preg_match_all($pattern, $content, $matched);
		// 取前十条数据
		for ($i = 0; $i < 10; $i++) {
			$data[$i] = array(
				'post_href'  => $matched['post_id'][$i],
				'post_title' => $matched['post_title'][$i],
			);
		}
		var_dump($data);
	}

	public function info($value = '') {
		phpinfo();
	}

	public function curl($url = '') {

		// 初始化curl函数
		$ch = curl_init($url);

		// 设置必要的配置信息
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

		// 执行curl
		$data = curl_exec($ch);

		// 关闭curl,释放资源
		curl_close($ch);

		return $data;
	}

	public function getStdNotice() {
		$data = $this->curl('http://cms.xbmu.edu.cn/frontChannelPage.action?siteId=69&articleClassId=1904');

		$pattern = '@<a href="(?<url>.*?)" target="_blank">(?<title>.*?)</a>.*?发布日期:(?<date>.*?)</td>@s';
		preg_match_all($pattern, $data, $matches);
		// echo '<pre>';
		// var_dump($matches['url'], $matches['title'], $matches['date']);
		// echo '</pre>';
		echo '<table>';
		for ($i = 0; $i < 5; $i++) {
			echo '<tr><td><a href="' . $matches['url'][$i + 1] . '">' . $matches['title'][$i] . '</a></td><td>' . date('Y-m-d', strtotime($matches['date'][$i])) . '</td></tr>';
		}
		echo '</table>';
	}

} // 大类结束
